package com.maoatao.easycodegen.core;

import lombok.Getter;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * 模板类型枚举
 *
 * @author MaoAtao
 * @date 2025-10-04
 */
@Getter
public enum Template {
    /**
     * Controller模板
     */
    CONTROLLER("web_controller.vm"),

    /**
     * BO模型模板
     */
    MODEL_BO("model_bo.vm"),

    /**
     * Query模型模板
     */
    MODEL_QUERY("model_query.vm"),

    /**
     * Request模型模板
     */
    MODEL_REQUEST("model_request.vm"),

    /**
     * VO模型模板
     */
    MODEL_VO("model_vo.vm"),

    /**
     * Converter模板
     */
    CONVERTER("converter.vm"),

    /**
     * Service接口模板
     */
    SERVICE("service.vm"),

    /**
     * Service实现类模板
     */
    SERVICE_IMPL("service_impl.vm"),

    /**
     * Mapper接口模板
     */
    MAPPER("mapper.vm"),

    /**
     * Mapper XML模板
     */
    MAPPER_XML("mapper.xml.vm"),

    /**
     * DO模型模板
     */
    MODEL_DO("model_do.vm");

    private final String name;

    Template(String name) {
        this.name = name;
    }

    /**
     * 获取创建操作使用的模板集合
     *
     * @return 创建操作使用的模板集合
     */
    public static Set<Template> create() {
        // 创建时使用所有模板
        Set<Template> templates = new HashSet<>();
        Collections.addAll(templates, values());
        return Collections.unmodifiableSet(templates);
    }

    /**
     * 获取更新操作使用的模板集合
     *
     * @return 更新操作使用的模板集合
     */
    public static Set<Template> update() {
        // 更新时使用部分模板（通常只修改和字段有关的类）
        return Set.of(
                Template.CONVERTER,
                Template.MAPPER_XML,
                Template.MODEL_DO,
                Template.MODEL_QUERY,
                Template.MODEL_REQUEST
        );
    }
}
